#include <REGX52.H>
#include "Delay.h"


/*矩阵键盘读取按键键码
返回值：KeyNumber，按下按键的键码值
如果按键按下不松手，程序停留于此函数（卡在这里）
松手的瞬间，返回函数键码
没有按键按下，返回0
*/



//采用逐列扫描，不与蜂鸣器冲突
unsigned char Matrixkey(void)
{
	unsigned char Keynumber=0;
	
	P1=0xFF;//P1按键全给高电平
	P1_3=0;//再给P1_3一个低电平,扫描第一列
	if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);Keynumber=1;}
	if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);Keynumber=5;}
	if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);Keynumber=9;}
	if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);Keynumber=13;}
	
	P1=0xFF;//P1按键全给高电平
	P1_2=0;//再给P1_2一个低电平，扫描第二列
	if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);Keynumber=2;}
	if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);Keynumber=6;}
	if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);Keynumber=10;}
	if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);Keynumber=14;}
	
	P1=0xFF;//P1按键全给高电平
	P1_1=0;//扫描第三列
	if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);Keynumber=3;}
	if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);Keynumber=7;}
	if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);Keynumber=11;}
	if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);Keynumber=15;}
	
	P1=0xFF;//P1按键全给高电平
	P1_0=0;//扫描第四列
	if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);Keynumber=4;}
	if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);Keynumber=8;}
	if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);Keynumber=12;}
	if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);Keynumber=16;}
	
	
	
	return Keynumber;
}